using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

namespace ASPNETVN.PORTAL.Modules.DOWNLOAD.Components
{
    public partial class Item
    {
        #region Private members.

        protected int _ID;
        protected int _CategoryID;
        protected string _Title = string.Empty;
        protected string _SubTitle = string.Empty;
        protected string _Description = string.Empty;
        protected string _ImageUrl = string.Empty;
        protected string _Url = string.Empty;
        protected decimal _FileSize;
        protected string _FileType = string.Empty;
        protected int _TotalComments;
        protected int _TotalViews;
        protected int _TotalDownloads;
        protected string _Keywords = string.Empty;
        protected string _CreatedBy = string.Empty;
        protected DateTime _CreatedDate;

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Properties.

        public int ID
        {
            set { this._ID = value; }
            get { return this._ID; }
        }

        public int CategoryID
        {
            set { this._CategoryID = value; }
            get { return this._CategoryID; }
        }

        public string Title
        {
            set { this._Title = value; }
            get { return this._Title; }
        }

        public string SubTitle
        {
            set { this._SubTitle = value; }
            get { return this._SubTitle; }
        }

        public string Description
        {
            set { this._Description = value; }
            get { return this._Description; }
        }

        public string ImageUrl
        {
            set { this._ImageUrl = value; }
            get { return this._ImageUrl; }
        }

        public string Url
        {
            set { this._Url = value; }
            get { return this._Url; }
        }

        public decimal FileSize
        {
            set { this._FileSize = value; }
            get { return this._FileSize; }
        }

        public string FileType
        {
            set { this._FileType = value; }
            get { return this._FileType; }
        }

        public int TotalComments
        {
            set { this._TotalComments = value; }
            get { return this._TotalComments; }
        }

        public int TotalViews
        {
            set { this._TotalViews = value; }
            get { return this._TotalViews; }
        }

        public int TotalDownloads
        {
            set { this._TotalDownloads = value; }
            get { return this._TotalDownloads; }
        }

        public string Keywords
        {
            set { this._Keywords = value; }
            get { return this._Keywords; }
        }

        public string CreatedBy
        {
            set { this._CreatedBy = value; }
            get { return this._CreatedBy; }
        }

        public DateTime CreatedDate
        {
            set { this._CreatedDate = value; }
            get { return this._CreatedDate; }
        }


        #endregion

        //---------------------------------------------------------------------------------------------

        #region Select methods.

        public static Item Load(int iD)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_Load";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, iD);
            Item entity = null;
            IDataReader reader = db.ExecuteReader(dbCommand);
            if (reader.Read())
            {
                entity = new Item();
                if (!reader.IsDBNull(reader.GetOrdinal("ID"))) entity.ID = reader.GetInt32(reader.GetOrdinal("ID"));
                if (!reader.IsDBNull(reader.GetOrdinal("CategoryID"))) entity.CategoryID = reader.GetInt32(reader.GetOrdinal("CategoryID"));
                if (!reader.IsDBNull(reader.GetOrdinal("Title"))) entity.Title = reader.GetString(reader.GetOrdinal("Title"));
                if (!reader.IsDBNull(reader.GetOrdinal("SubTitle"))) entity.SubTitle = reader.GetString(reader.GetOrdinal("SubTitle"));
                if (!reader.IsDBNull(reader.GetOrdinal("Description"))) entity.Description = reader.GetString(reader.GetOrdinal("Description"));
                if (!reader.IsDBNull(reader.GetOrdinal("ImageUrl"))) entity.ImageUrl = reader.GetString(reader.GetOrdinal("ImageUrl"));
                if (!reader.IsDBNull(reader.GetOrdinal("Url"))) entity.Url = reader.GetString(reader.GetOrdinal("Url"));
                if (!reader.IsDBNull(reader.GetOrdinal("FileSize"))) entity.FileSize = reader.GetDecimal(reader.GetOrdinal("FileSize"));
                if (!reader.IsDBNull(reader.GetOrdinal("FileType"))) entity.FileType = reader.GetString(reader.GetOrdinal("FileType"));
                if (!reader.IsDBNull(reader.GetOrdinal("TotalComments"))) entity.TotalComments = reader.GetInt32(reader.GetOrdinal("TotalComments"));
                if (!reader.IsDBNull(reader.GetOrdinal("TotalViews"))) entity.TotalViews = reader.GetInt32(reader.GetOrdinal("TotalViews"));
                if (!reader.IsDBNull(reader.GetOrdinal("TotalDownloads"))) entity.TotalDownloads = reader.GetInt32(reader.GetOrdinal("TotalDownloads"));
                if (!reader.IsDBNull(reader.GetOrdinal("Keywords"))) entity.Keywords = reader.GetString(reader.GetOrdinal("Keywords"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedBy"))) entity.CreatedBy = reader.GetString(reader.GetOrdinal("CreatedBy"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreatedDate"))) entity.CreatedDate = reader.GetDateTime(reader.GetOrdinal("CreatedDate"));
            }
            reader.Close();
            dbCommand.Connection.Close();

            return entity;
        }

        //---------------------------------------------------------------------------------------------

        public static DataSet SelectBy_CategoryID(int categoryID)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_SelectBy_CategoryID";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@CategoryID", SqlDbType.Int, categoryID);

            return db.ExecuteDataSet(dbCommand);
        }
        //---------------------------------------------------------------------------------------------

        public static DataSet SelectAll()
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_SelectAll";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);


            return db.ExecuteDataSet(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static IDataReader SelectReaderAll()
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_SelectAll";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);


            return db.ExecuteReader(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static DataSet SelectDynamic(string whereCondition, string orderByExpression)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_SelectDynamic";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@WhereCondition", SqlDbType.NVarChar, whereCondition);
            db.AddInParameter(dbCommand, "@OrderByExpression", SqlDbType.NVarChar, orderByExpression);

            return db.ExecuteDataSet(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static IDataReader SelectReaderDynamic(string whereCondition, string orderByExpression)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_SelectDynamic";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@WhereCondition", SqlDbType.NVarChar, whereCondition);
            db.AddInParameter(dbCommand, "@OrderByExpression", SqlDbType.NVarChar, orderByExpression);

            return db.ExecuteReader(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Insert methods.

        public static int Insert(int categoryID, string title, string subTitle, string description, string imageUrl, string url, decimal fileSize, string fileType, int totalComments, int totalViews, int totalDownloads, string keywords, string createdBy, DateTime createdDate)
        {
            Item entity = new Item();
            entity.CategoryID = categoryID;
            entity.Title = title;
            entity.SubTitle = subTitle;
            entity.Description = description;
            entity.ImageUrl = imageUrl;
            entity.Url = url;
            entity.FileSize = fileSize;
            entity.FileType = fileType;
            entity.TotalComments = totalComments;
            entity.TotalViews = totalViews;
            entity.TotalDownloads = totalDownloads;
            entity.Keywords = keywords;
            entity.CreatedBy = createdBy;
            entity.CreatedDate = createdDate;
            return entity.Insert();
        }

        public int Insert()
        {
            return this.Insert(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Insert(SqlTransaction transaction)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_Insert";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddOutParameter(dbCommand, "@ID", SqlDbType.Int, 4);
            db.AddInParameter(dbCommand, "@CategoryID", SqlDbType.Int, this._CategoryID);
            db.AddInParameter(dbCommand, "@Title", SqlDbType.NVarChar, this._Title);
            db.AddInParameter(dbCommand, "@SubTitle", SqlDbType.NVarChar, this._SubTitle);
            db.AddInParameter(dbCommand, "@Description", SqlDbType.NText, this._Description);
            db.AddInParameter(dbCommand, "@ImageUrl", SqlDbType.NVarChar, this._ImageUrl);
            db.AddInParameter(dbCommand, "@Url", SqlDbType.NVarChar, this._Url);
            db.AddInParameter(dbCommand, "@FileSize", SqlDbType.Decimal, this._FileSize);
            db.AddInParameter(dbCommand, "@FileType", SqlDbType.VarChar, this._FileType);
            db.AddInParameter(dbCommand, "@TotalComments", SqlDbType.Int, this._TotalComments);
            db.AddInParameter(dbCommand, "@TotalViews", SqlDbType.Int, this._TotalViews);
            db.AddInParameter(dbCommand, "@TotalDownloads", SqlDbType.Int, this._TotalDownloads);
            db.AddInParameter(dbCommand, "@Keywords", SqlDbType.NVarChar, this._Keywords);
            db.AddInParameter(dbCommand, "@CreatedBy", SqlDbType.NVarChar, this._CreatedBy);
            db.AddInParameter(dbCommand, "@CreatedDate", SqlDbType.DateTime, this._CreatedDate);

            if (transaction != null)
            {
                db.ExecuteNonQuery(dbCommand, transaction);
                this._ID = (int)db.GetParameterValue(dbCommand, "@ID");
                return this._ID;
            }
            else
            {
                db.ExecuteNonQuery(dbCommand);
                this._ID = (int)db.GetParameterValue(dbCommand, "@ID");
                return this._ID;
            }
        }

        //---------------------------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Update methods.

        public static int Update(int iD, int categoryID, string title, string subTitle, string description, string imageUrl, string url, decimal fileSize, string fileType, int totalComments, int totalViews, int totalDownloads, string keywords, string createdBy, DateTime createdDate)
        {
            Item entity = new Item();
            entity.ID = iD;
            entity.CategoryID = categoryID;
            entity.Title = title;
            entity.SubTitle = subTitle;
            entity.Description = description;
            entity.ImageUrl = imageUrl;
            entity.Url = url;
            entity.FileSize = fileSize;
            entity.FileType = fileType;
            entity.TotalComments = totalComments;
            entity.TotalViews = totalViews;
            entity.TotalDownloads = totalDownloads;
            entity.Keywords = keywords;
            entity.CreatedBy = createdBy;
            entity.CreatedDate = createdDate;
            return entity.Update();
        }

        public int Update()
        {
            return this.Update(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Update(SqlTransaction transaction)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_Update";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, this._ID);
            db.AddInParameter(dbCommand, "@CategoryID", SqlDbType.Int, this._CategoryID);
            db.AddInParameter(dbCommand, "@Title", SqlDbType.NVarChar, this._Title);
            db.AddInParameter(dbCommand, "@SubTitle", SqlDbType.NVarChar, this._SubTitle);
            db.AddInParameter(dbCommand, "@Description", SqlDbType.NText, this._Description);
            db.AddInParameter(dbCommand, "@ImageUrl", SqlDbType.NVarChar, this._ImageUrl);
            db.AddInParameter(dbCommand, "@Url", SqlDbType.NVarChar, this._Url);
            db.AddInParameter(dbCommand, "@FileSize", SqlDbType.Decimal, this._FileSize);
            db.AddInParameter(dbCommand, "@FileType", SqlDbType.VarChar, this._FileType);
            db.AddInParameter(dbCommand, "@TotalComments", SqlDbType.Int, this._TotalComments);
            db.AddInParameter(dbCommand, "@TotalViews", SqlDbType.Int, this._TotalViews);
            db.AddInParameter(dbCommand, "@TotalDownloads", SqlDbType.Int, this._TotalDownloads);
            db.AddInParameter(dbCommand, "@Keywords", SqlDbType.NVarChar, this._Keywords);
            db.AddInParameter(dbCommand, "@CreatedBy", SqlDbType.NVarChar, this._CreatedBy);
            db.AddInParameter(dbCommand, "@CreatedDate", SqlDbType.DateTime, this._CreatedDate);

            if (transaction != null)
                return db.ExecuteNonQuery(dbCommand, transaction);
            else
                return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------------------------

        #region Delete methods.

        public static int Delete(int iD)
        {
            Item entity = new Item();
            entity.ID = iD;
            return entity.Delete();
        }

        public int Delete()
        {
            return this.Delete(null);
        }

        //---------------------------------------------------------------------------------------------

        public int Delete(SqlTransaction transaction)
        {
            const string spName = "[dbo].p_DOWNLOAD_Item_Delete";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@ID", SqlDbType.Int, this._ID);

            if (transaction != null)
                return db.ExecuteNonQuery(dbCommand, transaction);
            else
                return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        public static int DeleteBy_CategoryID(int categoryID)
        {
            string spName = "[dbo].p_DOWNLOAD_Item_DeleteBy_CategoryID";
            SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();
            SqlCommand dbCommand = (SqlCommand)db.GetStoredProcCommand(spName);

            db.AddInParameter(dbCommand, "@CategoryID", SqlDbType.Int, categoryID);

            return db.ExecuteNonQuery(dbCommand);
        }

        //---------------------------------------------------------------------------------------------

        #endregion
    }
}